# -*- coding: utf-8 -*-
"""
Created on Tue Aug 15 19:16:38 2023

@author: skunk69
"""

import json

chinese_name = u'儿少主观生活质量问卷'
english_name = 'Inventory of Subjective Life Quality'
abbreviation = 'ISLQ'
category = u'生活质量与满意度量表'

outline = u"""生活质量评定一般包括两方面：主观生活满意度，对自身健康状态及生活环境满意程度的主观评价；客观生活质量，实际健康状态和物质生活水平。目前，多数生活质量评定问卷只评价个体的主观生活满意度或主观幸福感。程灶火等人按照多维层阶理论，编制了适用于儿童和青少年的主观生活质量问卷，即《儿少主观生活质量问卷》（Inventory of Subjective Life Quality, ISLQ），其理论建构为三水平八维度模式。"""

instruction = u"""这份问卷共有52道题目，这些题目描述了你平时的想法和感受。每个题目有四个选项，这四个选项分别是：你平时“没有”这个想法或感受，你“有时”有这个想法或感受，你“经常”有这种想法，你“总是”有这种想法。请你仔细阅读每个题目，并根据自己的实际情况如实地选择每个题目后适合你的选项。"""

with open('ISLQ.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
for line in lines:
    key,value = line.strip().split('.',maxsplit=1)
    items[key] = value.strip()

reverse_items = sorted([1,28,34,2,6,22,33,37,41,45,7,12,24,27,36,43,50,52,4,
                        15,18,31,47])
scales = [u'躯体情感',u'焦虑体验',u'抑郁体验',u'家庭生活',u'同伴交往',
          u'学校生活',u'生活环境',u'自我认识']
scales_items = [
    [4,15,18,31,47],# 躯体情感
    [7,12,24,27,36,43,50,52],#焦虑体验
    [2,6,22,33,37,41,45],# 抑郁体验
    [11,17,20,26,30,32,40],# 家庭生活
    [5,10,35,39,44,48],# 同伴交往
    [1,3,14,16,28,34,42,49],# 学校生活
    [8,13,21,29,46],# 生活环境
    [9,19,23,25,38,51],# 自我认识
    ]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{i for i in range(1,53)}
print(f'complementary set= {check_set}')

factors = [u'情感成分',u'认知成分']
factors_scales = [scales[0:3],scales[3::]]
rating = [u'没有',u'有时',u'经常',u'总是']
score_rules = list(range(1,5))

contents = {
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《儿少主观生活质量问卷》是一个自评量表。采用随机整群抽样方法，以中小学学生群体为研究对象，通过团体测试，以制订量表常模。"""

reliability = u"""8个维度的重测相关系数在0.541~0.805，2个成分及总分的重测相关系数分别为0.823、0.672和0.796。全量表的α系数为0.884，情感成分和认知成分的α系数分别为0.797和0.886，8个维度的α系数在0.540~0.835。全量表的分半信度为0.899，情感成分和认知成分的分半信度分别为0.8和0.911，8个维度的分半信度在0.520~0.862。"""
validity = u"""5个认知维度与认知成分相关高，3个情感维度与情感成分的相关高。各维度与总分的相关在0.374~0.932。情感成分与认知成分的相关为0.228。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""《儿少主观生活质量问卷》采用三水平八维度模式评价个体的生活满意度，共计52个条目。8个维度分别为躯体情感、焦虑体验、抑郁体验、家庭生活、同伴交往、学校生活、生活环境、自我认识。各个维度合成两个成分：情感成分，认知成分。其中，情感成分由躯体情感、焦虑体验、抑郁体验三个维度构成，认知成分由家庭生活、同伴交往、学校生活、生活环境、自我认识五个维度构成。
首先将反向题目反向计分，然后将各维度题目相加得到各维度分，由维度分合成2个成分的得分，最后得到总分，以评价总体的满意水平。
一般人们对生活质量表述的习惯为“十分满意”或者“百分百满意”，因此规定维度满意程度的取值范围为0~10分，成分或总体满意度的取值范围为0~100分。因为不同人群粗分的差异不大，故只制订了一套常模。
（1）各维度满意水平的计算
将各维度的粗分转换成0~10分，称为满意度，因为一般人群的生活满意度呈偏态分布，总体上偏满意人多，故在转换时将各维度的均数定为6，标准差定为1.5，计算公式如下：
维度满意度=6+1.5*(X-M)/SD，其中，M代表样本粗分均数，SD代表样本的标准差，X代表某个体实际所得的各维度的粗分。
（2）认知、情感成分以及总体满意度的计算
基于同样的原则，将成分或总体满意度均数定为60分，标准差为15，计算公式如下：
成分或总体满意度=60+15*(X-M)/SD，其中，M为样本均数，SD为样本标准差，X是个体所得的成分或总体粗分。
认知成分的5个维度，所得的标准分越高，满意水平越高，情绪成分的3个维度，得分高者，生活比较愉快，没有紧张的感觉、躯体症状较少。这8个维度得分在3分以上者占人群的95%，几乎没有人能达到十分满意的水平。得分在5~7分，满意度在一般水平，得分在3~4分，不太满意，低于3分为极不满意，得分在7分以上为比较满意。
认知成分、情感成分和总体满意水平采用百分制，得分越高，满意水平越高，0~29分为极不满意，30~49分为不太满意，50~70分为一般水平，71~90分为比较满意，90分以上为极满意。但是情感成分的最高分只能达到86分，说明在情感方面几乎没有人能达到极满意的水平，那种境界是每个人梦想达到的。"""

applications = u"""制定了儿少主观生活质量问卷粗分均数常模。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)